
// ==========================================
// API RESTAURANT - RESERVATION MODULE
// ==========================================

// 1. Récupérer les catégories de chambres
app.get("/api/categories-chambres", async (req, res) => {
    try {
        const query = `SELECT * FROM Categorie WHERE active = True ORDER BY Categorie`;
        const result = await executeQuery(query);
        res.json(result);
    } catch (error) {
        console.error("Erreur API /categories-chambres:", error);
        res.status(500).json({ error: error.message });
    }
});

// 2. Récupérer les chambres
app.get("/api/chambres", async (req, res) => {
    try {
        const query = `
            SELECT Chambre.*, Categorie.Categorie 
            FROM Chambre 
            LEFT JOIN Categorie ON Chambre.idCategorie = Categorie.idCategorie
            WHERE (Chambre.deleted = 0 OR Chambre.deleted IS NULL)
            ORDER BY Chambre.chambre
        `;
        const result = await executeQuery(query);
        res.json(result);
    } catch (error) {
        console.error("Erreur API /chambres:", error);
        res.status(500).json({ error: error.message });
    }
});

// 3. Récupérer les réservations (avec filtre date)
app.get("/api/reservations", async (req, res) => {
    const { start, end } = req.query;
    try {
        let query = `SELECT reservation.*, T_Client.NomClient, T_Client.PrenomClient 
                     FROM reservation 
                     LEFT JOIN T_Client ON reservation.idClient = T_Client.IDClient
                     WHERE (reservation.deleted IS NULL OR reservation.deleted = 0)`;

        if (start && end) {
            // Logique de chevauchement: (StartA <= EndB) and (EndA >= StartB)
            // Access date format: #yyyy-mm-dd#
            const s = escapeSql(start); // Assumes YYYY-MM-DD
            const e = escapeSql(end);
            query += ` AND (reservation.debutSejour <= #${e}# AND reservation.finSejour >= #${s}#)`;
        }

        query += ` ORDER BY reservation.debutSejour`;

        const result = await executeQuery(query);
        res.json(result);
    } catch (error) {
        console.error("Erreur API /reservations:", error);
        res.status(500).json({ error: error.message });
    }
});

// 4. Créer une réservation
app.post("/api/reservations", async (req, res) => {
    const data = req.body;
    // Data expected: idChambre, idClient, debutSejour, finSejour, nbAdulte, nbEnfant, Etat, etc.
    try {
        // Validation basique
        if (!data.idChambre || !data.debutSejour || !data.finSejour) {
            return res.status(400).json({ error: "Champs obligatoires manquants" });
        }

        const numSejour = 'RES-' + Date.now(); // Génération ID simple pour l'instant

        const query = `
            INSERT INTO reservation (
                numSejour, idChambre, idClient, debutSejour, finSejour, 
                nbAdulte, nbEnfant, Etat, date_add, user_add
            ) VALUES (
                '${numSejour}',
                ${data.idChambre},
                ${escapeSql(data.idClient || '')},
                #${escapeSql(data.debutSejour)}#,
                #${escapeSql(data.finSejour)}#,
                ${data.nbAdulte || 1},
                ${data.nbEnfant || 0},
                ${escapeSql(data.Etat || 'EN OPTION')},
                Now(),
                'WebUser'
            )
        `;
        
        await executeQuery(query);
        res.json({ success: true, numSejour, message: "Réservation créée" });

    } catch (error) {
        console.error("Erreur API POST /reservations:", error);
        res.status(500).json({ error: error.message });
    }
});

// 5. Mettre à jour une réservation
app.put("/api/reservations/:idSejour", async (req, res) => {
    const idSejour = req.params.idSejour;
    const data = req.body;
    try {
        // Build dynamic update
        let fields = [];
        if (data.idChambre) fields.push(`idChambre = ${data.idChambre}`);
        if (data.debutSejour) fields.push(`debutSejour = #${escapeSql(data.debutSejour)}#`);
        if (data.finSejour) fields.push(`finSejour = #${escapeSql(data.finSejour)}#`);
        if (data.Etat) fields.push(`Etat = ${escapeSql(data.Etat)}`);
        if (data.idClient) fields.push(`idClient = ${escapeSql(data.idClient)}`);
        
        fields.push(`date_upd = Now()`);

        if (fields.length === 1) return res.json({ success: true, message: "Rien à modifier" });

        const query = `UPDATE reservation SET ${fields.join(', ')} WHERE idSejour = ${idSejour}`;
        
        await executeQuery(query);
        res.json({ success: true, message: "Réservation mise à jour" });

    } catch (error) {
        console.error("Erreur API PUT /reservations:", error);
        res.status(500).json({ error: error.message });
    }
});
